using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._3DObjects
{
    /// <summary>
    /// <para>Add 3D Formats To Multipatch</para>
    /// <para>Converts a multipatch to a 3D object feature
    /// layer by linking the feature class with one or more 3D model
    /// formats.</para>
    /// <para>将多面体转换为 3D 对象要素
    /// 通过将要素类与一个或多个 3D 模型链接来图层
    /// 格式。</para>
    /// </summary>    
    [DisplayName("Add 3D Formats To Multipatch")]
    public class Add3DFormats : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public Add3DFormats()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input geodatabase multipatch feature that will be converted to a 3D object feature layer.</para>
        /// <para>将转换为 3D 对象要素图层的输入地理数据库多面体要素。</para>
        /// </param>
        public Add3DFormats(object _in_features)
        {
            this._in_features = _in_features;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Add 3D Formats To Multipatch";

        public override string CallName => "management.Add3DFormats";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _multipatch_materials.GetGPValue(), _formats, _updated_features];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input geodatabase multipatch feature that will be converted to a 3D object feature layer.</para>
        /// <para>将转换为 3D 对象要素图层的输入地理数据库多面体要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Use multipatch materials</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the multipatch geometry will be visualized using material information from the associated 3D models or the texture and color information stored with the multipatch.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The multipatch geometry will be visualized using the textures, colors, effects, and materials associated with the 3D models. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The multipatch geometry will be visualized using the textures and colors defined for the multipatch.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是使用关联 3D 模型中的材质信息还是使用多面体存储的纹理和颜色信息来可视化多面体几何图形。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将使用与 3D 模型关联的纹理、颜色、效果和材质对多面体几何进行可视化。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将使用为多面体定义的纹理和颜色来可视化多面体几何。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use multipatch materials")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _multipatch_materials_value _multipatch_materials { get; set; } = _multipatch_materials_value._true;

        public enum _multipatch_materials_value
        {
            /// <summary>
            /// <para>MULTIPATCH_WITH_MATERIALS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MULTIPATCH_WITH_MATERIALS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>MULTIPATCH_WITHOUT_MATERIALS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MULTIPATCH_WITHOUT_MATERIALS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>3D Formats to Add</para>
        /// <para><xdoc>
        ///   <para>Specifies the 3D formats that will be associated with the multipatch features. Each input feature will be duplicated for each selected format. The available options depend on the codecs installed on the computer.</para>
        ///   <bulletList>
        ///     <bullet_item>Collada (.dae)—The COLLADA format will be added.</bullet_item><para/>
        ///     <bullet_item>Autodesk (.fbx)—The Autodesk FilmBox format will be added.</bullet_item><para/>
        ///     <bullet_item>Khronos Group glTF json (.gltf)—The JSON Graphics Library Transmission format will be added.</bullet_item><para/>
        ///     <bullet_item>Khronos Group glTF binary (.glb)—The binary Graphics Library Transmission format will be added.</bullet_item><para/>
        ///     <bullet_item>Wavefront (.obj)—The Wavefront format will be added.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将与多面体要素关联的 3D 格式。每个输入特征将针对每种选定格式进行复制。可用选项取决于计算机上安装的编解码器。</para>
        ///   <bulletList>
        ///     <bullet_item>Collada （.dae） - 将添加 COLLADA 格式。</bullet_item><para/>
        ///     <bullet_item>Autodesk （.fbx） - 将添加 Autodesk FilmBox 格式。</bullet_item><para/>
        ///     <bullet_item>Khronos Group glTF json （.gltf） - 将添加 JSON 图形库传输格式。</bullet_item><para/>
        ///     <bullet_item>Khronos Group glTF 二进制文件 （.glb） - 将添加二进制图形库传输格式。</bullet_item><para/>
        ///     <bullet_item>波前 （.obj） - 将添加波前格式。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("3D Formats to Add")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _formats { get; set; } = null;


        /// <summary>
        /// <para>Updated Input Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_features { get; set; }


        public Add3DFormats SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}